package com.shujia.day13;

public class Demo03ThreadName {
    public static void main(String[] args) {

        /*
            TODO 获取线程名称
                ① 获取主线程的名称
                ② 自定义线程名称
         */
        Thread thread = Thread.currentThread(); // 获取当前正在运行的线程对象
        System.out.println("当前线程名称:" + thread.getName());
        System.out.println("当前线程ID:" + thread.getId());
        System.out.println("当前线程状态:" + thread.getState());  // RUNNABLE 表示正在运行
        System.out.println("当前线程优先权:" + thread.getPriority());

//        ThreadName threadName = new ThreadName();
//        threadName.start();  // 根据自定义类启动一个单独的线程运行run方法
//        threadName.start();  // TODO 注意:对于start方法 一个线程对象只能启动一次



//        new ThreadName().start();  // 根据自定义类启动一个单独的线程运行run方法
//        new ThreadName().start();  // TODO 每个线程对象通过start都会启动一个单独的线程  每个线程的名称都不一样

          // TODO 自定义线程名
        new ThreadName("李玉龙").start();
        new ThreadName("李亮").start();

        ThreadName threadName = new ThreadName();
        threadName.setName("杨德广");
        threadName.start();

    }

    static class ThreadName extends Thread {
        public ThreadName() {
        }

//        public ThreadName(String name) {
//            this.setName(name);
//        }

        public ThreadName(String name) {
            super(name);
        }

        @Override
        public void run() {
            while (true) {
                /*
                    public static native Thread currentThread();
                        返回的是当前的Thread对象 =>
                 */
//                Thread thread = Thread.currentThread();
//                System.out.println("当前线程名称:" + thread.getName());
//                System.out.println("当前线程ID:" + thread.getId());
//                System.out.println("当前线程状态:" + thread.getState());
//                System.out.println("这是自定义类中的run方法执行代码...");

                System.out.println("当前线程名称:" + this.getName());
                System.out.println("当前线程ID:" + this.getId());
                System.out.println("当前线程状态:" + this.getState());
                System.out.println("当前线程优先权:" + this.getPriority());
                System.out.println("这是自定义类中的run方法执行代码...");


                // TODO 注意:当前sleep由于需要异常处理,但是run方法是重写父类方法,不能在方法中添加throws 异常信息
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}
